package com.ballworld.mapEntity;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.opengles.GL10;

import static com.ballworld.util.Constant.*;

/**
 * Created by duocai at 22:46 on 2015/11/12.
 * 单个数字类，会切割纹理
 */
public class Number {
    private FloatBuffer   mVertexBuffer;//顶点坐标数据缓冲
    private FloatBuffer mTextureBuffer;//顶点着色数据缓冲
    public float x;//向基础轴推动到的地方
    public float y;
    public float z;
    int vCount;

    public Number(int number, float width, float height) {
        //顶点坐标数据的初始化================begin============================
        vCount=6;
        float[] vertices = new float[]{
                -width * UNIT_SIZE / 2, height * UNIT_SIZE / 2, 0,
                -width * UNIT_SIZE / 2, -height * UNIT_SIZE / 2, 0,
                width * UNIT_SIZE / 2, height * UNIT_SIZE / 2, 0,

                -width * UNIT_SIZE / 2, -height * UNIT_SIZE / 2, 0,
                width * UNIT_SIZE / 2, -height * UNIT_SIZE / 2, 0,
                width * UNIT_SIZE / 2, height * UNIT_SIZE / 2, 0
        };

        //创建顶点坐标数据缓冲
        //vertices.length*4是因为一个整数四个字节
        ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
        vbb.order(ByteOrder.nativeOrder());//设置字节顺序
        mVertexBuffer = vbb.asFloatBuffer();//转换为int型缓冲
        mVertexBuffer.put(vertices);//向缓冲区中放入顶点坐标数据
        mVertexBuffer.position(0);//设置缓冲区起始位置
        //特别提示：由于不同平台字节顺序不同数据单元不是字节的一定要经过ByteBuffer
        //转换，关键是要通过ByteOrder设置nativeOrder()，否则有可能会出问题
        //顶点坐标数据的初始化================end============================

        //顶点纹理数据的初始化================begin============================



        //创建顶点纹理数据缓冲//切割纹理
        float[] textures = new float[]{
                        0.1f * number, 0,
                        0.1f * number, 1,
                        0.1f * (number + 1), 0,
                        0.1f * number, 1,
                        0.1f * (number + 1), 1,
                        0.1f * (number + 1), 0
                };
        ByteBuffer tbb = ByteBuffer.allocateDirect(textures.length*4);
        tbb.order(ByteOrder.nativeOrder());//设置字节顺序
        mTextureBuffer= tbb.asFloatBuffer();//转换为Float型缓冲
        mTextureBuffer.put(textures);//向缓冲区中放入顶点着色数据
        mTextureBuffer.position(0);//设置缓冲区起始位置
        //特别提示：由于不同平台字节顺序不同数据单元不是字节的一定要经过ByteBuffer
        //转换，关键是要通过ByteOrder设置nativeOrder()，否则有可能会出问题
        //顶点纹理数据的初始化================end============================
    }

    public void drawSelf(GL10 gl,int texId) {
        gl.glPushMatrix();
        gl.glTranslatef(x, y, z);
        gl.glRotatef(-90,1,0,0);

        //为画笔指定顶点坐标数据
        gl.glVertexPointer
                (
                        3,				//每个顶点的坐标数量为3  xyz
                        GL10.GL_FLOAT,	//顶点坐标值的类型为 GL_FIXED
                        0, 				//连续顶点坐标数据之间的间隔
                        mVertexBuffer	//顶点坐标数据
                );


        //为画笔指定纹理ST坐标缓冲
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer);
        //绑定当前纹理
        gl.glBindTexture(GL10.GL_TEXTURE_2D, texId);

        //绘制图形
        gl.glDrawArrays
                (
                        GL10.GL_TRIANGLES, 		//以三角形方式填充
                        0,
                        vCount
                );

        gl.glPopMatrix();
    }
}
